PCsrc 并没有在图中画出来, 这个稍微有点复杂, 后文结合跳转指令再提


根据这些控制信号可以得出系统在给定指令下的一个周期内所需要做的具体操作, 应该选择哪一个作为输入, 是否应该写, 是否应该读, ALU 做何种计算等等. 这时候我们就可以回答第一个问题 "其他信息(others)指的是什么?", 或者与此等价的问题 "每一阶段的 IR 都保留了哪些值?"

long __vdso_getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *unused)
{
    vdso_read_cpunode(cpu, node);

    return 0;
}

long getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *tcache)
    __attribute__((weak, alias("__vdso_getcpu")));

image

因为高速缓存电路必须并行的遍历所有行,匹配所有标记位,所以构造一个又大又快的相联高速缓存困难且昂贵,因此全相联高速缓存指适合做小的高速缓存, 例如虚拟内存中的快表TLB

地址访问

处理器在进行存储器访问时,处理器访问的地址是虚拟地址,经过MMU的转换,得到物理地址.那么查询cache组是用虚拟地址还是物理地址的Index域呢?当找到cache组时,使用虚拟地址,还是物理地址的Tag域来匹配cache line呢?

有如下三种策略:

VIVT/VIPT/PIPT的优缺点分析:

zood